﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using ElearningOUHv2.Models;
using ElearningOUHv2.DAL;
using System.Web.Security;
using System.Data;

namespace ElearningOUHv2.Controllers
{
    public class TestController : Controller
    {
        private ElearningContext db = new ElearningContext();

        private List<Spg> spgListe = new List<Spg>();

        //
        // GET: /Svar/
        [AcceptVerbs(HttpVerbs.Get)]
        public ActionResult Index(Spg spg)
        {
            spg = Session["nySpg"] as Spg;
            if (spgListe.Count == 0 && spg == null)
            {

                string spgEmne = (string)Session["spgEmne"];
                spgListe = db.Emne.Where(model => model.emnenavn == spgEmne).First().spgList.ToList();
                if (spgListe.Count > 0)
                    spg = spgListe[0];
            }
            else if (spg.spgTekst == null)
            {
                spg = spgListe[0];
            }

            //Tjek om bruger har svaret på dette Spg før, hvis ja så gå til næste.
            if (User.Identity.IsAuthenticated)
            {
                if (TidligereSvar(spg))
                {
                    Session["tidligereSpg"] = spg;
                    return RedirectToAction("Next");
                }
            }
            return View(spg);
        }

        private bool TidligereSvar(Spg spg)
        {
            Guid BrugerID = (Guid)Membership.GetUser(User.Identity.Name).ProviderUserKey;
            List<Svar> svarForSpg = (from svarItem in db.Svar
                                     where svarItem.spg.spgID == spg.spgID && svarItem.userId == BrugerID
                                     select svarItem).ToList();

            if (svarForSpg.Count > 0)
            {
                return true;
            }
            else
            {
                return false;
            }
        }

        [AcceptVerbs(HttpVerbs.Post)]
        public ActionResult Modtagsvar(Spg nextspg, FormCollection form)
        {
            Session["næsteSpg"] = nextspg;
            Guid BrugerID = new Guid();
            if (User.Identity.IsAuthenticated)
            {
                BrugerID = (Guid)Membership.GetUser(User.Identity.Name).ProviderUserKey;
            }

            //Til spg med kun ét svar
            Session["svar"] = form[nextspg.spgTekst];


            //Variabel til flere valgte svarmuligheder
            List<int> valgtesvarmulighedersID = new List<int>();

            //Liste til gem af svar
            List<Svarmulighed> valgtesvarmuligheder = new List<Svarmulighed>();

            Spg tempSpg = db.Spg.Find(nextspg.spgID);

            //Hvis der er flere svarmuligheder valgt
            if (form.GetValue("[0].korrekt") != null)
            {
                int i = 0;
                foreach (Svarmulighed item in tempSpg.Svarmuligheder)
                {
                    if (item.svarTekst != "" && item.svarTekst != null)
                    {
                        if ((Boolean)form.GetValue("[" + i + "].korrekt").ConvertTo(typeof(Boolean)))
                        {
                            valgtesvarmuligheder.Add(item);
                        }
                        //item.korrekt = (Boolean)form.GetValue("[" + i + "].korrekt").ConvertTo(typeof(Boolean));
                        i++;
                    }
                    else
                    {
                        item.korrekt = false;
                    }
                }
                //valgtesvarmuligheder = tempSpg.Svarmuligheder.ToList();
                //valgtesvarmuligheder = (from itemA in valgtesvarmuligheder
                //                        from itemB in db.Svarmulighed
                //                        where itemA.svarmulighedID == itemB.svarmulighedID && itemA.korrekt == true
                //                        select itemB).ToList();
                Session["flereSvar"] = valgtesvarmuligheder;
                //Gem svardata til statistik
            }

            if (valgtesvarmuligheder.Count == 0)
            {
                int svar = int.Parse(form[nextspg.spgTekst]);
                valgtesvarmuligheder = (from itemB in db.Svarmulighed
                                        where svar == itemB.svarmulighedID
                                        select itemB).ToList();
                Session["flereSvar"] = valgtesvarmuligheder;
            }

            if (User.Identity.IsAuthenticated)
            {
                //TODO: fix gem til database
                db.Svar.Add(new Svar { spg = tempSpg, userId = BrugerID, svarmulighed = valgtesvarmuligheder, dato = DateTime.Now });
                db.SaveChanges();
            }
            return RedirectToAction("SvarKonsekvens");
        }


        [AcceptVerbs(HttpVerbs.Get)]
        public ActionResult SvarKonsekvens()
        {
            Spg tempspg = Session["næsteSpg"] as Spg;
            Session.Remove("næsteSpg");
            if (tempspg == null)
            {
                return View("Index");
            }
            Spg spg = db.Spg.Find(tempspg.spgID);
            ViewBag.Svar = Session["svar"] as string;
            ViewBag.flereSvar = Session["flereSvar"] as List<Svarmulighed>;
            Session.Remove("svar");
            ModelState.Clear();
            return View(spg);
        }

        public ActionResult Next(Spg spg)
        {
            if (Session["tidligereSpg"] != null)
            {
                spg = Session["tidligereSpg"] as Spg;
                Session.Remove("tidligereSpg");
            }
            string spgEmne = (string)Session["spgEmne"];
            spgListe = db.Emne.Where(model => model.emnenavn == spgEmne).First().spgList.ToList();
            for (int i = 0; i < spgListe.Count - 1; i++)
            {
                if (spgListe[i].spgID == spg.spgID)
                {
                    Spg tempSpg = spgListe[i + 1];
                    Session["nySpg"] = tempSpg;
                    return RedirectPermanent("Index");
                }
            }

            //Slutning på emne test er nået
            Session.Remove("nySpg");
            return RedirectToAction("IndexSpg", "Emne");
            //return RedirectPermanent("Index");
        }
    }
}
